package ningbo.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Author 宁铂
 * @Date 2021/7/29 11:39
 * @Version 1.0
 */
public class TestAnnotation {
    /** 实现自定义注解 */

}

/** 注解定义时,要使用@interface(创建接口关键字) + 注解名 的格式*/
/** 通过@target 定义自定义注解可以使用的位置 , 多个位置用逗号隔开 , 注解内部时数组的格式*/
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD}) // .METHOD(方法上) .TYPE(类上) .FIELD(属性上)
@Retention(RetentionPolicy.SOURCE) //.RUNTIME(一至到运行时都生效) .SOURCE(只是在源码中生存) .class(在字节码中生存) 三选一
@interface Test{ //自定义注解可以添加功能
    int age() default 0; //不是方法的定义,而是给自定义注解中定义age属性,添加属性时必须要给属性赋值,佛则会报错 格式(age = 10) ,为了使用方便可以给属性赋一个默认值 int age () default 0;便可以不加属性值,便可以直接使用注解

    String value() default "value"; //可以添加特殊属性value 名字固定,类型不限制,可以简写:@Test("value"),多个属性一起赋值不能简写,同样可以赋予默认值

}

/** 定义一个类来测试注解 */
@Test
class TestAnno{
    @Test
    String name;
    @Test(age = 10,value = "value")
    public void eat(){
        System.out.println("下雨天");
    }
}